package de.fhpotsdam.unfolding.examples.marker;

import processing.core.PApplet;

import de.fhpotsdam.unfolding.UnfoldingMap;
import de.fhpotsdam.unfolding.geo.Location;
import de.fhpotsdam.unfolding.marker.SimpleLinesMarker;
import de.fhpotsdam.unfolding.marker.SimplePointMarker;
import de.fhpotsdam.unfolding.providers.Google;
import de.fhpotsdam.unfolding.utils.MapUtils;

/**
 * Simple example with three markers, managed by the MarkerManager. Displays two point markers, and one line marker.
 * 
 * Managing and drawing the markers is handled internally, with all markers cut-off at the border of the map.
 * Unfolding's simple marker (SimpleMarker, SimpleLinesMarker, and SimplePolygonMarker) provide some styling
 * functionality. For more customization you need to create your own Marker classes.
 */
@SuppressWarnings("serial")
public class SimpleMarkerManagerApp extends PApplet {

	UnfoldingMap map;

	public void setup() {
		size(800, 600, OPENGL);

		map = new UnfoldingMap(this, new Google.GoogleMapProvider());

		map.zoomToLevel(3);
		map.panTo(new Location(40f, -42f));
		MapUtils.createDefaultEventDispatcher(this, map);

		// Create Markers from Locations
		Location berlinLocation = new Location(52.5f, 13.4f);
		Location mexicoCityLocation = new Location(19.4f, -99.1f);

		// Point Markers
		SimplePointMarker berlinMarker = new SimplePointMarker(berlinLocation);
		SimplePointMarker mexicoCityMarker = new SimplePointMarker(mexicoCityLocation);
		// Line Marker
		SimpleLinesMarker connectionMarker = new SimpleLinesMarker(berlinLocation, mexicoCityLocation);

		// Add Markers to the maps default MarkerManager
		map.addMarkers(berlinMarker, mexicoCityMarker, connectionMarker);
		
		// Adapt style
		berlinMarker.setColor(color(255, 0, 0, 100));
		berlinMarker.setStrokeColor(color(255, 0, 0));
		berlinMarker.setStrokeWeight(2);
	}

	public void draw() {
		background(240);

		// Drawing Markers in handled internally
		map.draw();
	}

}
